package com.example.testdemo.rxjava_test;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.example.testdemo.R;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;


public class EventBusA_Activity extends AppCompatActivity {
    public static final String TAG = "EventBusA_Activity";
    private Button btnSend;
    private TextView textView;
    /**
     创建默认的EventBus对象，相当于EventBus.getDefault()。 EventBus installDefaultEventBus()：
     添加由EventBus“注释预处理器生成的索引 EventBuilder addIndex(SubscriberInfoIndex index)：
     默认情况下，EventBus认为事件类有层次结构（订户超类将被通知） EventBuilder eventInheritance(boolean eventInheritance)：
     定义一个线程池用于处理后台线程和异步线程分发事件 EventBuilder executorService(java.util.concurrent.ExecutorService executorService)：
     设置忽略订阅索引，即使事件已被设置索引，默认为false EventBuilder ignoreGeneratedIndex(boolean ignoreGeneratedIndex)：
     打印没有订阅消息，默认为true EventBuilder logNoSubscriberMessages(boolean logNoSubscriberMessages)：
     打印订阅异常，默认true EventBuilder logSubscriberExceptions(boolean logSubscriberExceptions)：
     设置发送的的事件在没有订阅者的情况时，EventBus是否保持静默，默认true EventBuilder sendNoSubscriberEvent(boolean sendNoSubscriberEvent)：
     发送分发事件的异常，默认true EventBuilder sendSubscriberExceptionEvent(boolean sendSubscriberExceptionEvent)：
     在3.0以前，接收处理事件的方法名以onEvent开头，方法名称验证避免不是以此开头，启用严格的方法验证（默认：false） EventBuilder strictMethodVerification(java.lang.Class<?> clazz)
     如果onEvent***方法出现异常，是否将此异常分发给订阅者（默认：false） EventBuilder throwSubscriberException(boolean throwSubscriberException)*/

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rxjava_test_a_view);
        btnSend = findViewById(R.id.button);
        textView = findViewById(R.id.textView2);

        EventBus.getDefault().register(this);
        /**自定义注册方式*/
//        EventBus eventBus = EventBus.builder()
//                .eventInheritance(true)
//                .ignoreGeneratedIndex(false)
//                .logNoSubscriberMessages(true)
//                .logSubscriberExceptions(false)
//                .sendNoSubscriberEvent(true)
//                .sendSubscriberExceptionEvent(true)
//                .throwSubscriberException(true)
//                .strictMethodVerification(true)
//                .build();
//        eventBus.register(this);





        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送粘性
                EventBus.getDefault().postSticky("从A页面传过来得数据 看到了吗？");
                Intent intent = new Intent(EventBusA_Activity.this, EventBusB_Activity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }


    /**
     * threadMode： 线程
     *     POSTING：事件发布在什么线程，就在什么线程订阅。
     *     MAIN：无论事件在什么线程发布，都在主线程订阅。
     *     BACKGROUND：如果发布的线程不是主线程，则在该线程订阅，如果是主线程，则使用一个单独的后台线程订阅。
     *     ASYNC：用线程池线程订阅。
     * sticky： 发布黏性事件
     *     true: 粘性 保留消息 后订阅者也能接收到
     *     false: 不粘性
     * priority：  优先级 数字越大优先级越高
     * @param upDateUiEvent
     */

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onUploadText(UpDateUiEvent upDateUiEvent){
        textView.setText(upDateUiEvent.text);

//        EventBus.getDefault().cancelEventDelivery(updateUIEvent);//取消事件继续传递
    }

}
